package br.com.aerusc.persistence.dao;

import java.util.List;
import java.util.logging.Logger;

import br.com.aerusc.entity.Jogador;
import br.com.aerusc.entity.Mensalidade;
import br.com.aerusc.filters.FiltroJogador;

import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;
import com.googlecode.objectify.Query;
import com.googlecode.objectify.util.DAOBase;

public class JogadorDAO extends DAOBase {
	static {
		ObjectifyService.register(Jogador.class);
	}
	private static final Logger log = Logger.getLogger(JogadorDAO.class.getName());

	public Jogador salvar(Jogador jogador) {
		Objectify ofy = ObjectifyService.begin();
		Jogador retorno = null;
		try {
			ofy.put(jogador);
			if (jogador.getId() != null) {
				retorno = jogador;
			}
		} catch (Exception e) {
			log.severe(e.getMessage());
		}

		return retorno;
	}
	
	public void remover(Jogador jogador) {
		Objectify ofy = ObjectifyService.begin();
		try {
			Query<Mensalidade> q = ofy.query(Mensalidade.class);
			q = q.filter("idUsuario", jogador.getId());
			List<Mensalidade> mensalidades = q.list();
			ofy.delete(mensalidades);
			ofy.delete(jogador);
		} catch (Exception e) {
			log.severe(e.getMessage());
		}
	}

	public List<Jogador> listar() {
		Objectify objectify = ObjectifyService.begin();
		Query<Jogador> q = objectify.query(Jogador.class);
		List<Jogador> retorno = q.list();
		return retorno;
	}
	
	public Jogador recuperar(Long id) {
		Objectify objectify = ObjectifyService.begin();
		Jogador retorno = objectify.find(Jogador.class, id);
		return retorno;
	}
	
	public List<Jogador> listarPorFiltro(FiltroJogador filtro) {
		Objectify objectify = ObjectifyService.begin();
		Query<Jogador> q = objectify.query(Jogador.class);
		if(!filtro.getNome().isEmpty()){
			q = q.filter("nome", filtro.getNome().trim());
			
		}
		if(filtro.getNumeroCarteira()!= null){
			q = q.filter("numeroCarteira", filtro.getNumeroCarteira());
		}
		List<Jogador> retorno = q.list();
		return retorno;
	}

}
